#pragma once
#include <string>
#include <cstddef> // std::size_t
#include <boost/date_time/posix_time/posix_time.hpp>
#include <odb/core.hxx>

typedef boost::posix_time::ptime ptime;
#pragma db object table("person")
class Person
{
public:
    Person(const std::string &name, int age, const ptime &update) : _name(name), _age(age), _update(update) {}
    void age(int val) { _age = val; }
    int age() { return _age; }
    void name(const std::string &val) { _name = val; }
    std::string name() { return _name; }
    void update(const ptime &update) { _update = update; }
    std::string update() { return boost::posix_time::to_simple_string(_update); }

private:
    friend class odb::access;
    Person() {}
//_id 成员前面的 pragma 告诉 ODB 编译器，以下成员是对象的标识符。 auto 说明符指示它是数据库分配的 ID。
#pragma db id auto // 表示 ID 字段将自动生成（通常是数据库中的主键）。
    unsigned long _id;
    unsigned short _age;
#pragma db unique
    std::string _name;
#pragma db type("TIMESTAMP") not_null
    boost::posix_time::ptime _update;
};


//odb -d mysql --std c++11 --generate-query --generate-schema --profile boost/date-time person.hxx